////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2011-2012 www.iflytek.com. All Rights Reserved.
//  This software for customer relationship management system, developed by Noo team.
//  Software code and design for the team, copy rights reserved.
////////////////////////////////////////////////////////////////////////////////

package com.iflytek.ci.cpms.dao;

import com.iflytek.ci.cpms.domain.Project;
import com.iflytek.ci.cpms.dto.ProjectInformation;
import com.iflytek.framework.mybatis.extra.MyBatisDao;
import com.iflytek.framework.pagination.PaginationCriteria;
import com.iflytek.framework.pagination.PaginationResult;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 项目数据库访问接口.
 * </p>
 * 
 * @author poplar.yfyang
 * @version 1.0 2012-10-30 10:47 AM
 * @since JDK 1.5
 */
@MyBatisDao
public interface ProjectDao {

	/**
	 * 分页获取所有项目信息
	 * 
	 * @return 项目信息
	 */
	PaginationResult<Project> pageProject(PaginationCriteria criteria);

	/**
	 * 查询项目信息，可以按项目名称和项目KEY来进行查询
	 * 
	 * @param criteria
	 *            分页信息
	 * @param params
	 *            参数信息，查询条件。Map中的KEY如下 NAME:项目名称 KEY：项目标志
	 * @return 符合查询条件的项目信息
	 */
	PaginationResult<Project> serachProjects(PaginationCriteria criteria,
			Map<String, Object> params);

	/**
	 * Fuzzy search for projects by name and key
	 * 
	 * @param criteria
	 *            Paging criteria
	 * @param search
	 *            Query paramters
	 * @return projects for the query
	 */
	PaginationResult<Project> fuzzy_page_searcha_projects(
			PaginationCriteria criteria, String search);

	/**
	 * Fuzzy search for projects by name and key
	 * 
	 * @param key
	 *            Query paramters
	 * @return projects for the query
	 */
	List<Project> fuzzy_search_projects(String key);

	/**
	 * 新增一个项目信息 获取后，需要将项目的自增长主键增值获取到
	 * 
	 * @param project
	 *            项目信息
	 */
	int add_project(Project project);

	/**
	 * 删除项目信息
	 * 
	 * @param id
	 *            一个或者多个项目ID
	 */
	int delete_project(String[] id);

	List<Project> project_with_text();

	/**
	 * 获取某一个项目信息
	 * 
	 * @param map
	 *            参数
	 */
	Project getProject(Map<String, Object> map);

	/**
	 * 获取一个项目的所有信息包括基本信息、团队信息、里程碑信息
	 * 
	 * @param pid
	 *            项目id
	 * @return ProjectInformation 数据传输对象 封装项目所有信息
	 */
	ProjectInformation getPrjectInformation(long pid);

	/**
	 * 更新某一个项目信息
	 * 
	 * @param project
	 *            项目信息
	 */
	int updateProject(Project project);

	/**
	 * 根据项目ID获取项目信息
	 * 
	 * @param id
	 *            项目ID
	 * @return 项目信息
	 */
	Project project_with_id(long id);

	/**
	 * 根据项目标记获取项目信息
	 * 
	 * @param key
	 *            项目标记
	 * @return 项目信息
	 */
	Project project_with_key(String key);

	/**
	 * Get project by ids
	 * 
	 * @param ids
	 *            list of the ids
	 * @return Projects' information
	 */
	List<Project> projects_with_ids(String[] ids);

	/**
	 * get project by login
	 * 
	 * @param login
	 *            登录帐号
	 * @param criteria
	 *            分页信息
	 * @return paginationResult
	 */
	PaginationResult<Project> page_project_login(PaginationCriteria criteria,
			String login);

	/**
	 * get project by leaderlogin
	 * 
	 * @param criteria
	 *            分页信息
	 * @param login
	 *            用户登录名称
	 */
	PaginationResult<Project> page_project_leader(PaginationCriteria criteria,
			String login);

	/**
	 * 查询分页搜索，只搜索自己的项目信息
	 * 
	 * @param criteria
	 *            分页参数
	 * @param login
	 *            登录名称
	 * @param search
	 *            搜索名称
	 * @return 符合条件的项目信息
	 */
	PaginationResult<Project> fuzzy_page_searcha_projects_login(
			PaginationCriteria criteria, String login, String search);

	/**
	 * 更新反馈数量
	 * 
	 * @param id
	 * @param num
	 */
	int update_issue_size(long id, long num);

	/**
	 * 根据milestone的id获取projectInfo
	 * 
	 * @param milestone_id
	 * @return
	 */
	ProjectInformation get_project_info(long milestone_id);

	/**
	 * get tid
	 * 
	 * @param pid
	 */
	long getTidByPid(long pid);

	int project_add_team(long pid, String tid);

	/**
	 * 获取某人参与的或者领导的所有项目，不分页处理
	 * 
	 * @param login
	 *            用户登录名
	 * @return project
	 */
	List<Project> get_all_project_login(String login);

	/**
	 * 获取所有项目的信息，不做分页处理
	 * 
	 * @return
	 */
	List<Project> get_all_project();
	
	 /*
	 * 通过一个或者多个项目的id获取项目keys
     * @param ids
     *    一个或多个项目的id
     * @return
     */
    String[] get_Keys_by_ids(String[] ids);
}
